home *** CD-ROM | disk | FTP | other *** search
- -> StdErr.E
- -> The flexible stderr port for Amiga E
-
- OPT MODULE
-
- MODULE 'dos/datetime','dos/dos'
-
- -> Recommended tests to make:
-
- RAISE "OPEN" IF Open() = NIL,
- "MEM" IF New() = NIL,
- "FILE" IF VfPrintf() = TRUE,
- "FILE" IF Fputs() = TRUE
-
- /*endfold*/
-
- -> Global declarations (global to StdErr)
-
- OBJECT err
- PRIVATE
- filename,
- private,
- fh,
- ioerr,
- name
- ENDOBJECT
-
- DEF stderr:PTR TO err
- /*endfold*/
-
- PROC close()
- IF stderr.fh AND (stderr.fh <> stdout) THEN Close(stderr.fh)
- stderr.fh:=0
- ENDPROC
-
- PROC open() HANDLE
- DEF dt:datetime,tmp
- stderr.ioerr:=SetIoErr(0)
- IF stderr.filename <> stderr.private
- close()
- IF stderr.filename=stdout
- stderr.fh:=stdout
- ENDIF
- stderr.private:=stderr.filename
- ENDIF
- IF stderr.private AND (stderr.private <> stdout)
- DateStamp(dt.stamp)
- dt.format:=FORMAT_DOS -> set datetime options
- dt.flags:=0
- dt.strday:=String(11)
- dt.strdate:=String(11)
- dt.strtime:=String(11)
- DateToStr(dt) -> make into string
- IF (stderr.fh <> stdout) AND (stderr.fh = NIL)
- IF tmp := Open(stderr.private,MODE_READWRITE)
- stderr.fh := tmp
- ELSE
- stderr.fh := stdout
- ENDIF
- ENDIF
- Seek(stderr.fh,0,OFFSET_END)
- VfPrintf(stderr.fh,'\s: \s | \s | \s\n',[stderr.name,dt.strday,dt.strdate,dt.strtime])
- Flush(stderr.fh)
- Dispose(dt.strday); Dispose(dt.strdate); Dispose(dt.strtime)
- ELSEIF wbmessage -> if called from icon
- IF (stderr.fh <> stdout) AND stderr.fh THEN Close(stderr.fh)
- WriteF('')
- stderr.fh:=stdout
- SetIoErr(0)
- ELSEIF stderr.private <> stdout
- IF (stderr.fh <> stdout) AND stderr.fh THEN Close(stderr.fh)
- stderr.fh:=Open('CONSOLE:',NEWFILE) -> for stderr activity on CLI call
- ENDIF
- IF stderr.fh=0
- stderr.fh:=stdout
- ENDIF
-
- EXCEPT
- close()
- stderr.ioerr:=SetIoErr(0)
- WriteF('*** Error in stderr.open()')
- IF stderr.ioerr THEN PrintFault(stderr.ioerr,stderr.name)
- WriteF('\n')
- Raise(exception)
- ENDPROC
-
- EXPORT PROC err_Name(program_name=NIL) HANDLE
- IF stderr=NIL
- NEW stderr
- ENDIF
- IF program_name THEN stderr.name := program_name ELSE stderr.name := 'StdErr'
- EXCEPT
- Raise(exception)
- ENDPROC
-
- EXPORT PROC err_Dispose()
- IF stderr=NIL THEN RETURN
- close()
- IF wbmessage AND stdout THEN WriteF('Press RETURN to close window.\b')
- Dispose(stderr)
- stderr:=NIL
- ENDPROC
-
- EXPORT PROC err_WriteF(format=NIL,items=NIL) HANDLE
- -> Here's a way to write errors without having to open a window until we
- -> absolutely HAVE to.
- DEF ioerr
- IF stderr
- open()
- ELSE
- NEW stderr
- open()
- ENDIF
- IF items
- VfPrintf(stderr.fh,format,items)
- Flush(stderr.fh)
- ELSE
- IF format
- Fputs(stderr.fh,format)
- Flush(stderr.fh)
- ENDIF
- ENDIF
- IF stderr.ioerr
- ioerr:=String(81)
- IF Fault(stderr.ioerr,stderr.name,ioerr,80)
- Fputs(stderr.fh,ioerr)
- Fputs(stderr.fh,'\n')
- Flush(stderr.fh)
- ENDIF
- ENDIF
- EXCEPT
- IF stderr=NIL THEN NEW stderr
- ioerr:=SetIoErr(0)
- WriteF('*** Error in err_WriteF()!')
- IF ioerr THEN PrintFault(ioerr,'StdErr')
- WriteF('\n')
- Raise(exception)
- ENDPROC
-
- EXPORT PROC err_New(filename=NIL) HANDLE
- IF stderr=NIL THEN NEW stderr
- close()
- IF (stderr.filename<>0) AND (stderr.filename<>stdout) THEN Dispose(stderr.filename)
- stderr.filename:=filename
- IF stderr.name = NIL THEN stderr.name := 'StdErr'
- EXCEPT
- Raise(exception)
- ENDPROC
- /*EE folds
- -1
- 8 7 12 7 10 5 12 2 15 48 18 6 21 5 24 33 27 7 EE folds*/
-